perm filename VIXSAI.SAI[VIS,HPM]1 blob sn#263815 filedate 1977-02-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY FNTSEL,CHRDEP,MARSET
C00004 00003	OWN INTEGER XMAR
C00008 ENDMK
C⊗;
ENTRY FNTSEL,CHRDEP,MARSET;

BEGIN "VIXSAI"
REQUIRE "FILHDR.SAI[VIS,HPM]" SOURCE_FILE;
DEFINE PCLN=0;  comment index of word in a picture file containing
			number of scanlines in the picture;
DEFINE PCWD=1;	comment number of words in the picture;
DEFINE PCBY=2;	comment number of valid bytes in the picture;
DEFINE PCBYA=3;	comment no. of bytes including the nulls at the end of lines;
DEFINE LNWD=4;	comment no. of words per scanline;
DEFINE LNBY=5;	comment no. of valid bytes per scanline;
DEFINE LNBYA=6;	comment no. of bytes per scanline, including the nulls;
DEFINE WDBY=7;	comment no. of bytes per word;
DEFINE WDBI=8;	comment no. of bits containing data in a word;
DEFINE BYBI=9;	comment no. of bits per byte;
DEFINE BPTAB=10; comment address of second entry in byte pntr. table;
DEFINE LINTAB=11; comment actual address of the first entry in the row table;
OWN INTEGER XMAR;
OWN INTEGER ARRAY FNTAR[0:'17];
OWN STRING ARRAY FNTNAM[0:'17];
OWN STRING FILNM;
EXTERNAL PROCEDURE ADDEL(REFERENCE INTEGER PIC; INTEGER I,J,VAL);
DEFINE FNTHIG='201;

INTERNAL INTEGER PROCEDURE FNTSEL(INTEGER FNTNUM; STRING FILSPEC;
				  REFERENCE INTEGER FNTHEAD);
   BEGIN "FNTSEL"
   INTEGER ICHAN,FOO,IFLAG;
   PRSFIL(FILSPEC);
   FNTNAM[FNTNUM]←DEVPRS&":"&FILPRS;
   FNTAR[FNTNUM]←LOCATION(FNTHEAD);
   ICHAN←GETCHAN;
   IFLAG←TRUE;
   OPEN(ICHAN,DEVPRS,'10,2,0,FOO,FOO,IFLAG);
   LOOKUP(ICHAN,FILPRS,IFLAG);
   IF IFLAG THEN BEGIN RELEASE(ICHAN); RETURN(0); END;
   ARRYIN(ICHAN,MEMORY[LOCATION(FNTHEAD)+0],'202);
   RELEASE(ICHAN);
   RETURN(MEMORY[LOCATION(FNTHEAD)+'201]);  comment  return height of font;
   END "FNTSEL";

INTERNAL PROCEDURE MARSET(INTEGER LMAR);
   BEGIN
   XMAR←LMAR;
   END;

INTERNAL PROCEDURE CHRDEP(INTEGER FNTNUM; STRING CHRS; REFERENCE INTEGER PIC,
                          YLO,XLO; INTEGER YCOMP(1),XCOMP(1));
   BEGIN "CHRDEP"
   INTEGER ICHAN,FOO,POS,I,J,RASW,CHR;
   PRSFIL(FNTNAM[FNTNUM]);
   ICHAN←GETCHAN;
   FOO←1;
   OPEN(ICHAN,DEVPRS,'10,2,0,FOO,FOO,FOO);
   LOOKUP(ICHAN,FILPRS,FOO);
   WHILE LENGTH(CHRS)>0 DO
   IF (MEMORY[FNTAR[FNTNUM]+(CHR←LOP(CHRS))]) LAND '777777≠0
            ∨ CHR='15 ∨ CHR='12 THEN
      BEGIN "LOOP"
      IF CHR='15 THEN XLO←XMAR ELSE
      IF CHR='12 THEN YLO←YLO+MEMORY[FNTAR[FNTNUM]+'201] ELSE
         BEGIN "REAL"
	 POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
	 USETI(ICHAN,POS%128 + 1);
	 FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(ICHAN);
	 RASW←WORDIN(ICHAN);
	   BEGIN "READ"
	   INTEGER XLOK,YLOK,NROW,PTQ;
	   INTEGER ARRAY CHAR[0:(RASW LAND '777777)-2];
	   ARRYIN(ICHAN,CHAR[0],(RASW LAND '777777)-1);
	   RASW←RASW LSH -27;
           IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
	   XLOK←XLO-(CHAR[0] LSH -27);
	   YLOK←YLO+((CHAR[0] LSH -18) LAND '777);
	   NROW←CHAR[0] LAND '777777;
	   IF NROW*RASW>0 THEN PTQ←POINT(1,CHAR[1],-1);
	   FOR I←1 STEP 1 UNTIL NROW DO
	      BEGIN "PACK"
	      FOR J←1 STEP 1 UNTIL RASW DO IF ILDB(PTQ) THEN
                 ADDEL(PIC,(YLOK+I)%YCOMP,(XLOK+J)%XCOMP,1);
	      IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
	      END "PACK";
	   END "READ";
	 XLO←XLO+(MEMORY[FNTAR[FNTNUM]+CHR] LSH -18);
         END "REAL";
      END "LOOP";
   RELEASE(ICHAN);
   END "CHRDEP";
END "VIXSAI";